export interface VideoProps {
	btnData: string[];
	desc: string;
	label: string;
	streamList: StreamList[];
	handlerClick: (index: number) => void;
	muteStatus: boolean;
}

interface StreamList extends MediaStream {
	streamLabel: string;
	[propName: string]: any;
}

export interface LoginFormProps {
	submitForm: (form: LoginForm) => void;
	guestLogin: () => void;
}

export interface LoginForm {
	url: string;
	username: string;
	password: string;
	org: string | number;
}

export interface AgentStatusProps {
	sceneData: Scene[];
	requestSessionStatus: string;
	selectScene: (id: number) => void;
	requestSession: () => void;
	cancelRequestSession: () => void;
}

export interface Scene {
	id: number | string;
	name: string;
}

export interface AgentFeature {}

export interface ClientFeatureProps {
	checkedMicStatus: string;
	checkedCameraStatus: string;
	setMicTest: (status: CheckedDevicesStatus) => void;
	setCameraTest: (status: CheckedDevicesStatus) => void;
}

export enum RequestSessionStatus {
	DONE = 'DONE',
	FAILED = 'FAILED',
	INIT = 'INIT',
	CANCEL = 'CANCEL',
	ONPROGRESS = 'ONPROGRESS'
}

export enum CheckedDevicesStatus {
	DONE = 'DONE',
	FAILED = 'FAILED',
	INIT = 'INIT'
}
export enum LoginStatus {
	SUCCESS = 'SUCCESS',
	FAILED = 'FAILED',
	INIT = 'INIT'
}

export interface Customer {
	userName: string;
	customerLevel: number;
	gender: string;
	id: number;
	fullName: string;
	isDisabled: string;
	isRobot: boolean;
	org: string;
	picture: string;
}

export interface Message {
	createdAt: string;
	data: string;
	type: string;
	id: string;
	formUser: { id: number; name: string; avatar: string; isRobot: boolean };
	[propName: string]: any;
}

export interface Agent {
	customerLevel: number | null;
	id: number;
	name: string;
	org: string;
	profile: {
		isRobot: boolean;
		[propName: string]: any;
	};
	[propName: string]: any;
}
type Member = {
	id: number;
	label: string;
};

export interface Session {
	clientId: string;
	members: object[];
	roomId: string;
	roomToken: string;
	sessionId: string;
	ticket: string;
	publicationId: string;
	localStream: MediaStream | any;
	participantId: string;
}

export interface inviteProgressResponse {
	code: string;
	message: string;
	positon: number;
	waitingCode: string;
	waitingNumber: number;
}

export interface agentJoinSessionResponse {
	type: string;
	data: {
		at: Date;
		id: string;
		role: string;
		roomToken: string;
		status: string;
		type: string;
		user: Agent;
	};
}

export interface StartVideoResponse {
	publicationId: string;
	localStream: MediaStream;
	roomInfo: {
		[propName: string]: any;
	};
	[propName: string]: any;
}

export interface UserProps {
	picture: string;
	fullName: string;
	gender: string;
}
enum StreamEventEnum {
	ONSTREAMADD = 'onStreamAdd'
}

export interface StreamInfoProps {
	data: { streamLabel: string; audioOnly: boolean; id?: string };
	type: StreamEventEnum.ONSTREAMADD;
}

export interface CommandProps {
	agentName: string;
	command: string;
	date: string;
	id: number;
	[propName: string]: any;
}
